# 导入OpenCV库
import cv2
# 导入NumPy库
import numpy as np
# 导入Matplotlib的pyplot模块用于绘图
from matplotlib import pyplot as plt

# 读取原始彩色图像（BGR格式）
img1 = cv2.imread('lena.jpg')

# 颜色空间BGR转灰度图
img = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)

# 保存灰度图像为gray.jpeg
cv2.imwrite("gray.jpeg", img)

# 执行直方图均衡化
equ = cv2.equalizeHist(img)

# 水平显示原图与均衡化结果
pic_equ = np.hstack([img, equ])

# 保存对比图像，并排显示处理前后效果
cv2.imwrite("hist_equ.jpeg", pic_equ)

# 创建OpenCV窗口，并显示处理后的图像和原图像
cv2.imshow("Histogram Equalization", pic_equ)

# 等待100毫秒
cv2.waitKey(100)

# 创建Matplotlib画布（1行2列布局，当前激活第1个子图）
plt.subplot(121)
# 绘制原始图像直方图（ravel将二维数组展开，256个范围，为0-255）
plt.hist(img.ravel(), 256, [0, 256])

# 绘制第2张子图
plt.subplot(122)
# 绘制均衡化后直方图
plt.hist(equ.ravel(), 256, [0, 256])

# 显示所有子图
plt.show()